import 'package:get/get.dart';
import 'dart:developer' as developer;

/// 🔥 全局通知管理器 - 统一管理各页面的通知状态
class NotificationManager extends GetxService {
  static NotificationManager get to => Get.find();

  // 🔔 主页消息通知状态
  final RxBool homeMessageNotification = false.obs;
  
  // 🔔 聊天页面好友申请通知状态
  final RxBool friendRequestNotification = false.obs;

  /// 🔥 设置加好友消息通知（同时更新主页和聊天页面）
  void setFriendRequestNotification(bool hasNotification) {
    try {
      developer.log('🔔 =============== 设置加好友消息通知 ===============');
      developer.log('📱 通知状态: $hasNotification');
      
      // 更新主页消息通知状态
      homeMessageNotification.value = hasNotification;
      developer.log('✅ 主页消息通知状态已更新: $hasNotification');
      
      // 更新聊天页面好友申请通知状态
      friendRequestNotification.value = hasNotification;
      developer.log('✅ 聊天页面好友申请通知状态已更新: $hasNotification');
      
      // 🎯 通知各个页面控制器同步状态
      _notifyControllers(hasNotification);
      
      developer.log('🔔 加好友消息通知设置完成');
      
    } catch (e) {
      developer.log('💥 设置加好友消息通知失败: $e');
    }
  }

  /// 🔥 清除加好友消息通知（同时清除主页和聊天页面）
  void clearFriendRequestNotification() {
    try {
      developer.log('🔔 =============== 清除加好友消息通知 ===============');
      
      // 清除主页消息通知状态
      homeMessageNotification.value = false;
      developer.log('✅ 主页消息通知状态已清除');
      
      // 清除聊天页面好友申请通知状态
      friendRequestNotification.value = false;
      developer.log('✅ 聊天页面好友申请通知状态已清除');
      
      // 🎯 通知各个页面控制器同步状态
      _notifyControllers(false);
      
      developer.log('🔔 加好友消息通知清除完成');
      
    } catch (e) {
      developer.log('💥 清除加好友消息通知失败: $e');
    }
  }

  /// 🔥 私有方法 - 通知各个页面控制器同步状态
  void _notifyControllers(bool hasNotification) {
    try {
      // 使用回调函数列表来通知各个页面，避免直接依赖控制器类
      _notifyCallbacks.forEach((callback) {
        try {
          callback(hasNotification);
        } catch (e) {
          developer.log('💥 通知回调执行失败: $e');
        }
      });
      
      developer.log('📢 已通知 ${_notifyCallbacks.length} 个页面控制器');
      
    } catch (e) {
      developer.log('💥 通知页面控制器同步状态失败: $e');
    }
  }

  // 🔥 回调函数列表
  final List<Function(bool)> _notifyCallbacks = [];

  /// 🔥 注册通知回调（各个页面控制器调用此方法注册自己的通知处理逻辑）
  void registerNotificationCallback(Function(bool) callback) {
    if (!_notifyCallbacks.contains(callback)) {
      _notifyCallbacks.add(callback);
      developer.log('📝 已注册通知回调，当前回调数量: ${_notifyCallbacks.length}');
      
      // 🔥 新注册的回调立即同步当前状态
      if (friendRequestNotification.value) {
        try {
          callback(true);
          developer.log('🔄 新注册的回调已同步当前好友申请通知状态: true');
        } catch (e) {
          developer.log('💥 同步通知状态给新回调失败: $e');
        }
      }
    }
  }

  /// 🔥 取消注册通知回调
  void unregisterNotificationCallback(Function(bool) callback) {
    _notifyCallbacks.remove(callback);
    developer.log('📝 已取消注册通知回调，当前回调数量: ${_notifyCallbacks.length}');
  }

  /// 🔥 获取主页消息通知状态
  bool get hasHomeMessageNotification => homeMessageNotification.value;

  /// 🔥 获取聊天页面好友申请通知状态
  bool get hasFriendRequestNotificationStatus => friendRequestNotification.value;

  @override
  void onInit() {
    super.onInit();
    developer.log('🔔 NotificationManager 初始化完成');
  }

  @override
  void onClose() {
    developer.log('🔔 NotificationManager 关闭');
    super.onClose();
  }
}


